home *** CD-ROM | disk | FTP | other *** search
- /* ======================================================================*/
- /* tturbo.c 9-9-92 support for Turbo C frontend for
- Tierra Simulator V4.0: Copyright (c) 1992 Dan Pirone & Virtual Life
- written by Daniel pirone
- v 1.0
- */
- /* ======================================================================*/
- #include <conio.h>
- #include <graphics.h>
- /* ======================================================================*/
-
- int DispText = 11, DispBack = 2, InfoText = 5, InfoBack = 3;
-
- void FEExit(ENO)
- I32s ENO;
- { sleep(1); textmode(C80);
- /* textattr(15); */
- textbackground(0);
- textcolor(15);
- clrscr(); exit(ENO);
- }
-
- /* ======================================================================*/
- #define FECeol() clreol()
- /* ======================================================================*/
-
- int FEGetc()
- {
- return getch();
- }
-
- void FEMemCheck(msg)
- I8s *msg;
- {
- FEPrintf(1, 11, 0, "%s\n", msg);
- FEPrintf(1, 12, 0, "%ld,%ld\n", InstExe.m, InstExe.i);
- if (strncmp(msg,"Out of Memory", 13));
- { FEPrintf(1, 13, 0, "Hit any key to continue...\n");
- FEGetc();
- }
- }
-
- /* ======================================================================*/
- /* called immediately after the soup_in file is read */
- /* an opportunity to interactively set soup_in vars */
- void FEStartup()
- { FILE *inf;
- I8s tt, first[12], second[12];
- I16s gmode, color;
-
- #if __TURBOC__ >= 0x200 /* deal with older compilers */
- FE_DV_Mode = DETECT;
- detectgraph(&FE_DV_Mode,&gmode );
- #endif
-
- if(inf = fopen("tcolors.cfg","r"))
- { fgets(Buff, 84, inf);
- do
- { if (*Buff != '#' && strlen(Buff) > 3)
- { sscanf(Buff, "%11s%11s%d", first, second, &color);
- if (!strcmp(first,"information"))
- { if (!strcmp(second,"text:"))
- InfoText = color;
- else if (!strcmp(second,"background:"))
- InfoBack = color;
- }
- else if (!strcmp(first,"display"))
- { if (!strcmp(second,"text:"))
- DispText = color;
- else if (!strcmp(second,"background:"))
- DispBack = color;
- }
- }
- } while (fgets(Buff, 84, inf) != NULL);
- fclose(inf);
- }
-
- fe_width = 57;
- IMode = PLN_STATS;
- PLN_X = 1;
- PLN_Y = 3;
- MSG_X = 1;
- MSG_Y = PLN_Y;
- ERR_X = 1;
- HLP_X = 1;
-
- textmode(C80);
- /* textattr(43); */
- textbackground(DispBack);
- textcolor(DispText);
- clrscr();
-
- /* Title screen */
- gotoxy(35,5);
- cprintf("TIERRA");
- gotoxy(34,7);
- cprintf("July 92");
- gotoxy(29,9);
- cprintf("Artificial Life System");
- gotoxy(37,11);
- cprintf("By");
- gotoxy(31,13);
- cprintf("Dr. Thomas S. Ray");
- gotoxy(20,15);
- cprintf("Daniel Pirone, Tom Uffner & Marc Cygnus");
-
- sleep(3);
- FE_DosVideoToggle(0);
- FEPrintf(HLP_X,HLP_Y,1,
- " Tierra initializing, please wait ... "
- );
-
- }
- /* ======================================================================*/
- void FEPrintf(I32s scr_x, I32s scr_y, I32s scr_a,...)
- {
- va_list ap;
-
-
- I8s *msg_str,
- buf[80];
- I8s CF = 0;
- va_start(ap,scr_a);
-
- if((scr_x < 1) || (scr_x > 80) || (scr_y < 1) || (scr_y > HLP_Y))
- {sound(100); return ; }
- if (scr_a)
- { textbackground(InfoBack);
- textcolor(InfoText);
- /* textattr(53); */
- }
-
- if (*(msg_str = va_arg(ap, I8s *)) != 0)
- {
- vsprintf(buf,msg_str,ap);
- if (buf[strlen(buf)-1] == '\n') {buf[strlen(buf)-1]='\0';CF=1;}
- gotoxy(scr_x,scr_y);
- cprintf(buf);
- if (CF) clreol();
- }
- va_end(ap);
- if (scr_a)
- { textbackground(DispBack);
- textcolor(DispText);
- /* textattr(43); */
- }
-
- }
-
- /* ======================================================================*/
- void FEStats()
- { if (GeneBnker)
- { FEPrintf(1,1,1,
- "InstExec = %ld,%6.6ld Cells = %4ld Genotypes = %4ld Sizes =%4ld ",
- InstExe.m,InstExe.i,NumCells, NumGenotypes, NumSizes);
- FEPrintf(1,2,1,
- "Extracted = %-20.20s ",
- ExtrG);
- }
- else /* (GeneBnker) */
- { FEPrintf(1,1,1,
- "InstExec = %ld,%6.6ld Cells = %4ld ", InstExe.m,InstExe.i,NumCells);
- }
- }
- /* ======================================================================*/
-
- /*-----------------------------------------------------------------------*/
-
- void FEMenu()
- {
- I8s answer;
- I32s tsz;
- I8s data[85];
-
- #ifdef ALCOMM
- AL_run_flag = 1;
- #endif
- while(1)
- {
- FEPrintf(HLP_X,HLP_Y,1,
- "TIERRA | i-info v-var s-save q-save&quit Q-quit m-misc c-continue |->"
- );
- answer = getch();
-
- if (answer == 'c')
- {
- break;
- }
- if (answer == 'v')
- { IMode = 69;
- FE_DosVideoToggle(0);
- FEPrintf(MSG_X,MSG_Y,0,
- "To alter any global variable from soup_in, type\n");
- FEPrintf(MSG_X,MSG_Y+1,0,
- "the variable name (using proper case), a space,\n");
- FEPrintf(MSG_X,MSG_Y+2,0,
- "an equal sign, a space, and the new value.\n");
- FEPrintf(MSG_X,MSG_Y+3,0,
- "Use no space at start of line. Some examples:\n");
- FEPrintf(MSG_X,MSG_Y+4,0, "alive = 0\n");
- FEPrintf(MSG_X,MSG_Y+5,0, "DistProp = .6\n");
- FEPrintf(MSG_X,MSG_Y+6,0,"GenebankPath = newpath/\n");
- FEClrmsg(MSG_Y+7);
- gotoxy(HLP_X,HLP_Y-2);
- if ((gets(data)) == NULL) break;
- /* DAN get a string */
- if (!GetAVar(data))
- FEError(-1600,NOEXIT,NOWRITE,
- "Tierra FEMenu() Not a valid soup_in variable: %s", data);
- IMode = PLN_STATS;
- ToggleLog(0L);
- }
-
- if (answer == 'i')
- {
- #ifdef ERROR
- FEPrintf(1,2,1,
- "Coreleft = %lu TotMemUse = %6ld FreeMemCurrent = %6ld"
- ,(unsigned long) coreleft(), TotMemUse, FreeMemCurrent);
- #else
- FEPrintf(1,2,1,
- "Coreleft = %lu FreeBlocks = %6ld FreeMemCurrent = %6ld"
- ,(unsigned long) coreleft(), FreeBlocks, FreeMemCurrent);
- #endif
- FEPrintf(HLP_X,HLP_Y,1,
- "INFO | p-plan s-size_histo g-gen_histo m-mem_histo z-size_query |->"
- );
- answer = getch();
- if (answer == 'z')
- {
- IMode = 69;
- FE_DosVideoToggle(FE_DV_Mode);
- FEClrmsg(MSG_Y);
- sprintf(mes[0],
- "Enter a size class ( eg: 80 ) to examine -> ");
- FEMessage(1,mes);
- gotoxy(HLP_X,HLP_Y-2);
- if ((gets(data)) == NULL) break;
- sscanf(data,"%d", &tsz);
- FEClrmsg(MSG_Y);
- if (Hist != NULL)
- { thfree(Hist);
- Hist = NULL;
- }
- query_size((I16u)tsz);
- FEPrintf(HLP_X,HLP_Y,1,
- "INFO | z-size_query Press any key to continue ... |->"
- );
- getch();
- IMode = PLN_STATS;
- FE_DosVideoToggle(0);
- }
-
- if (answer == 'p')
- {
- IMode = 69;
- FE_DosVideoToggle(0);
- FEClrmsg(MSG_Y);
- sprintf(mes[0],
- "Now in Plan Display mode, updated every million time steps \n");
- FEMessage(1,mes);
- IMode = PLN_STATS;
- if (Hist != NULL)
- {
- thfree(Hist);
- Hist = NULL;
- }
- }
- if (answer == 's')
- {
- if(GeneBnker)
- {
- IMode = SIZ_HIST;
- FE_DosVideoToggle(FE_DV_Mode);
- query_species(fe_lines);
- }
- }
- if (answer == 'm')
- {
- if(GeneBnker)
- {
- IMode = SIZM_HIST;
- FE_DosVideoToggle(FE_DV_Mode);
- query_species(fe_lines);
- }
- }
- if (answer == 'g')
- {
- if(GeneBnker)
- {
- IMode = GEN_HIST;
- FE_DosVideoToggle(FE_DV_Mode);
- query_species(fe_lines);
- }
- }
- answer = ' ';
- }
- if (answer == 's')
- {
- FEError(-1601,NOEXIT,WRITE," ");
- }
- if (answer == 'q')
- {
- FEError(-1602,EXIT,WRITE," ");
- }
- if (answer == 'm')
- {
- IMode = 69;
- FE_DosVideoToggle(0);
- FEClrmsg(MSG_Y);
- FEPrintf(1,2,1,"VER=%1.2f INST=%d PLOIDY=%d %s %s %s\n",
- VER,INST,PLOIDY,
- #ifdef ERROR
- "ERROR",
- #else
- "",
- #endif
- #ifdef MEM_PROF
- "MEM_PROF",
- #else
- "",
- #endif
- #ifdef MICRO
- "MICRO"
- #else
- ""
- #endif
- );
-
- FEPrintf(HLP_X,HLP_Y,1,
- "MISC | H-Histo Logging S-DOS Shell I-Inject Gene %s |->\n",
-
- #ifdef MICRO
- "M-Micro Toggle"
- #else
- ""
- #endif
- );
- gotoxy(HLP_X+79,HLP_Y);
- answer = getch();
- if (answer == 'H')
- {
- HistPrint = (Log && !HistPrint)? 1 : 0;
- sprintf(mes[0],
- "%s \n",(Log)? (HistPrint)? "Logging Histograms \n":
- "NOT Logging Histograms \n" :
- "Log NOT on ! \n");
- FEMessage(1,mes);
- }
- #ifdef MICRO
- if (answer == 'M')
- {
- if(MC_step == -1L) MC_step = 0L;
- else if(MC_step == 0L) MC_step = 1L;
- else {MC_step =-1L; if(tfp_log != NULL) Log = 1L;}
- sprintf(mes[0]," MICRO STEP Mode = %s\n",
- (MC_step == -1)?"off": (MC_step == 1)?"keypress":"delay");
- FEMessage(1,mes);
- }
- #endif /* MICRO */
-
- if (answer == 'S')
- {
- FEPrintf(HLP_X,HLP_Y,1,
- "TIERRA: shell (%s), type exit to return ... ",SHELL);
- system(SHELL);
- FE_DosVideoToggle(0);
- }
- if (answer == 'I')
- {
- sprintf(mes[0],"INJECT GENE TO RUNNING SIMULATION\n");
- sprintf(mes[1],"Enter gene name ( eg 0080aaa) or \n");
- sprintf(mes[2],"Enter abort to cancel\n");
- FEMessage(3,mes);
- FEPrintf(HLP_X,HLP_Y-2,0," ");
- fgets(data,84,stdin);
- if ((data[0] >= '0') && (data[0] <= '9') )
- {
- InjectFromBank(data, -1, 0);
- }
- else
- {
- FEError(-13667,NOEXIT,NOWRITE,"User abort of Injection!");
- }
- }
-
- answer = ' ';
- IMode = PLN_STATS;
- } /* end of misc */
-
- if (answer == 'Q') FEExit(-1);
- } /* end while loop */
- FEPrintf(HLP_X,HLP_Y,1,
- " Press Any Key for menu ... "
- );
- }
-
- /*-----------------------------------------------------------------------*/
-
- /* ======================================================================*/
- void FEClrmsg(n)
- I32s n;
- {
- I8s t;
- if(n <0) return;
- for(t= n; t < fe_lines; t++)
- {
- gotoxy(MSG_X,t);
- clreol();
- }
-
- }
- /* ======================================================================*/
- void FE_DosVideoToggle(mode)
- I16s mode;
- {
- int tt;
-
- #if __TURBOC__ >= 0x200 /* deal with older compilers */
- if (mode == EGA)
- {
- textmode(C4350); /* use C4350 for ega/vga */
- fe_lines = 42;
- ERR_Y = 42;
- HLP_Y = 43;
- }
- else
- if (mode == VGA)
- {
- textmode(C4350);
- fe_lines = 49;
- ERR_Y = 49;
- HLP_Y = 50;
- }
- else
- #endif /* __TURBOC__ >= 0x200 */
- {
- textmode(C80);
- fe_lines = 24;
- ERR_Y = 24;
- HLP_Y = 25;
- }
- /* textattr(43); */
- textbackground(DispBack);
- textcolor(DispText);
- clrscr();
-
- /* textattr(53); */
- textbackground(InfoBack);
- textcolor(InfoText);
- for(tt = 1; tt < 81; tt++)
- {
- gotoxy(tt,1);
- cprintf(" ");
- gotoxy(tt,2);
- cprintf(" ");
- gotoxy(tt,ERR_Y);
- cprintf(" ");
- gotoxy(tt,HLP_Y);
- cprintf(" ");
- }
- /* textattr(43); */
- textbackground(DispBack);
- textcolor(DispText);
- FEStats();
- }
- /* ======================================================================*/
- /* ======================================================================*/
-